package com.zp.self.module.level_4_算法练习.数据结构.二叉树;

/**
 * @author By ZengPeng
 */
public class 力扣_404_左叶子之和 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_404_左叶子之和().sumOfLeftLeaves(TreeNode.initRoot()));
    }

    /**
     * 题目：计算给定二叉树的所有左叶子之和。
     *
     * 示例：
     *     3
     *    / \
     *   9  20
     *     /  \
     *    15   7
     *
     * 在这个二叉树中，有两个左叶子，分别是 9 和 15，所以返回 24
     *
     * 分析：
     *      1.递归 ;
     *          单步操作：当前节点的  左右节点有无子节点？ 无累加 ：有递归子节点
     *          终止条件：所有节点遍历完
     *          返回值：累计值+ 递归返回值
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public int sumOfLeftLeaves(TreeNode root) {
        int sum = 0;
        if(root==null) return sum;
        TreeNode left = root.left;
        if(left!=null){
            if(left.left==null &&  left.right==null) sum+=left.val;//此处说明是子叶节点了：加上节点值
            else sum+=sumOfLeftLeaves(left);
        }
        TreeNode right = root.right;
        if(right!=null && (right.left!=null || right.right!=null))//此处说明是不是子叶节点了
            sum+=sumOfLeftLeaves(right);//继续递归
        return  sum;
    }
}
